package com.operator.Activitys.fragment;

import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;

import com.afollestad.materialdialogs.MaterialDialog;
import com.google.gson.Gson;
import com.operator.Activitys.R;
import com.operator.Activitys.bean.State;
import com.operator.Activitys.bean.User;
import com.operator.Activitys.fragment.base.BaseFragment;
import com.operator.Activitys.http.manager.UserManager;
import com.operator.Activitys.utils.CheckUtils;
import com.operator.Activitys.utils.Constant;
import com.operator.Activitys.utils.ToastUtils;
import com.operator.Activitys.view.AmountView;

import org.simple.eventbus.Subscriber;

import butterknife.Bind;

/**
 * 项目名称：金泽云 手机app
 * 类描述：卡号进货页面
 * 创建人：张飞祥
 * 创建时间：2018/4/27 14:29
 * 修改人：张飞祥
 * 修改时间：2018/4/27 14:29
 * 修改备注：
 */
public class PurchaseFragment extends BaseFragment implements AmountView.OnAmountChangeListener {

    //标题
    @Bind(R.id.tv_title)
    TextView tvTitle;
    //联通 卡号 计量器
    @Bind(R.id.av_purchase_unicom_metering)
    AmountView avPurchaseUnicomMetering;
    //移动 卡号 计量器
    @Bind(R.id.av_purchase_move_metering)
    AmountView avPurchaseMoveMetering;
    //电信 卡号 计量器
    @Bind(R.id.av_purchase_telecom_metering)
    AmountView avPurchaseTelecomMetering;
    //170 卡号 计量器
    @Bind(R.id.av_purchase_other_metering)
    AmountView avPurchaseOtherMetering;
    //收货地址
    @Bind(R.id.et_purchase_address)
    EditText etPurchaseAddress;
    //联系电话
    @Bind(R.id.et_purchase_phone)
    EditText etPurchasePhone;
    //配送方式 - 快递物流 单选按钮
    @Bind(R.id.rb_purchase_mode_express)
    RadioButton rbPurchaseModeExpress;
    //配送方式 - 业务员上门 单选按钮
    @Bind(R.id.rb_purchase_mode_drop_in)
    RadioButton rbPurchaseModeDropIn;
    //配送方式 - 单选按钮管理者
    @Bind(R.id.rg_purchase_mode)
    RadioGroup rgPurchaseMode;
    //提交信息按钮
    @Bind(R.id.btn_purchase_submit)
    Button btnPurchaseSubmit;


    //TODO 当前用户信息
    private User mACacheUser = null;
    //TODO 初始化网络请求
    public UserManager mApiManager;


    //联通卡数量
    private int mUnicomNum = 0;
    //移动卡数量
    private int mMoveNum = 0;
    //电信卡数量
    private int mTelecomNum = 0;
    //170数量
    private int mOtherNum = 0;

    //配送方式
    private String mGiveType = "快递物流";

    @Override
    protected void initViews() {

        //网络请求接口 常驻方法
        mApiManager = mApiManager.getUserApiManager(getActivity(), getActivity().getTaskId());

        //TODO 获取内存用户实体
        Gson gson = new Gson();
        mACacheUser = gson.fromJson(mACache.getAsJSONObject(Constant.CACHE_USER) + "", User.class);

        //设置标题
        tvTitle.setText("卡号进货");
        //设置联通卡号库存数量
        avPurchaseUnicomMetering.setGoods_storage(Integer.MAX_VALUE);
        //设置移动卡号库存数量
        avPurchaseMoveMetering.setGoods_storage(Integer.MAX_VALUE);
        //设置电信卡号库存数量
        avPurchaseTelecomMetering.setGoods_storage(Integer.MAX_VALUE);
        //设置170卡号库存数量
        avPurchaseOtherMetering.setGoods_storage(Integer.MAX_VALUE);

        //事件监听
        initClickListener();
    }

    /**
     * 页面所有事件监听
     */
    private void initClickListener() {

        //电信 卡号 计量器 事件监听
        avPurchaseTelecomMetering.setOnAmountChangeListener(this);
        //移动 卡号 计量器 事件监听
        avPurchaseMoveMetering.setOnAmountChangeListener(this);
        //联通 卡号 计量器 事件监听
        avPurchaseUnicomMetering.setOnAmountChangeListener(this);
        //170 卡号 计量器 事件监听
        avPurchaseOtherMetering.setOnAmountChangeListener(this);

        //TODO  单选按钮选中事件
        rgPurchaseMode.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int id) {
                if (id == R.id.rb_purchase_mode_express) {
                    mGiveType = "快递物流";

                    //TODO 提示数据
                    //地址
                    etPurchaseAddress.setHint("请输入您的收货地址");
                    //电话
                    etPurchasePhone.setHint("请输入您的联系电话");

                }else {
                    mGiveType = "业务员上门";

                    //TODO 提示数据
                    //地址
                    etPurchaseAddress.setHint("请输入您的收货地址（选填）");
                    //电话
                    etPurchasePhone.setHint("请输入您的联系电话（选填）");

                    //TODO 清空数据
                    //地址
                    etPurchaseAddress.setText("");
                    //电话
                    etPurchasePhone.setText("");
                }
            }
        });

        //TODO 提交按钮 点击事件
        btnPurchaseSubmit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                /**
                 * 逻辑判断
                 * 1.判断 当前店铺是否已经认证
                 * 2.判断 当前店铺是否给冻结了
                 * 3.都不是的情况下 进行原来的 数据操作
                 *
                 */
                if (Constant.SHOP_CONFIRM_YES.equals(mACacheUser.getIsCertified())) {

                    if (Constant.SHOP_STATE_YES.equals(mACacheUser.getState()))
                        initHttpSubmit();
                    else
                        ToastUtils.showShort(getActivity(),getResources().getString(R.string.shop_state_no));
                }else {
                    ToastUtils.showShort(getActivity(), getResources().getString(R.string.shop_confirm_no));
                }
            }
        });
    }

    /**
     * 三个数量加减数量监听
     *
     * @param view
     * @param amount
     */
    @Override
    public void onAmountChange(View view, int amount) {
        switch (view.getId()) {
            case R.id.av_purchase_unicom_metering: //联通 卡号 计量器
                mUnicomNum = amount;
                break;
            case R.id.av_purchase_move_metering:   //移动 卡号 计量器
                mMoveNum = amount;
                break;
            case R.id.av_purchase_telecom_metering://电信 卡号 计量器
                mTelecomNum = amount;
                break;
            case R.id.av_purchase_other_metering:  //170 卡号 计量器
                mOtherNum = amount;
                break;
        }
    }

    /**
     * 网络请求 按钮提交事件
     */
    private void initHttpSubmit() {

        //配送地址
        String address = etPurchaseAddress.getText().toString();
        //联系电话
        String phone = etPurchasePhone.getText().toString();

        //TODO 非空、验证判断
        if ((address.equals("") || phone.equals("")) && mGiveType.equals("快递物流")) {
            ToastUtils.showShort(getActivity(), "请您认真填写，全部内容不许为空！");
        } else if (!CheckUtils.isMobile(phone) && mGiveType.equals("快递物流")) {
            ToastUtils.showShort(getActivity(), "手机号码格式不正确！");
        } else if (mUnicomNum == 0 && mMoveNum == 0 && mTelecomNum == 0 && mOtherNum == 0) {
            ToastUtils.showShort(getActivity(), "请至少添加一种号卡数量，数量不能全部为 0 ！");
        } else if (Constant.SHOP_STATE_NO.equals(mACacheUser.getState())){
            ToastUtils.showShort(getActivity(), getResources().getString(R.string.shop_state_no));
        }else {
            //显示 加载提示框
            initShowTimeDialog("正在提交，请稍后....", getActivity());
            //开始网络请求
            mApiManager.userCardPurchase(mACacheUser.getId(), mOtherNum, mMoveNum, mUnicomNum, mTelecomNum, phone, address, mGiveType);
        }
    }

    /**
     * 极光推送 店铺 冻结结果
     */
    @Subscriber(tag = Constant.BUS_JPUSH_SHOP_FROZEN_TAG)
    public void onJpushShopFrozenTag(String pushTag) {
        mACacheUser.setState(pushTag);
    }

    /**
     * 响应 提交卡号进货 出错
     */
    @Subscriber(tag = Constant.BUS_PURCHASE_CARD_ERROR)
    public void onCardSubmitError(String strError) {
        //延时 1s
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //销毁弹窗
                mFrgTimeDialog.dismiss();
                //弹出提示
                ToastUtils.showShort(getActivity(), "网络连接不稳定，请重试！");
            }
        }, 1000);
    }

    /**
     * 加载 提交卡号进货 返回结果
     */
    @Subscriber(tag = Constant.BUS_PURCHASE_CARD)
    public void onCardSubmit(final State state) {
        //延时 1s
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //销毁弹窗
                mFrgTimeDialog.dismiss();
                //清空页面上的数据
                clearData();
                //返回值判断
                if (state.getState().equals("1"))
                    //提交成功，弹出提示框
                    initShowMsgDialog();
                else
                    ToastUtils.showShort(getActivity(), state.getMsg());
            }
        }, 1000);
    }


    /**
     * 显示提示dialog
     */
    public void initShowMsgDialog() {
        //提示 dialog
        MaterialDialog mMsgDialog = new MaterialDialog.Builder(getActivity())
                .title("提交成功")
                .content("卡号进货信息提交成功，请耐心等待，我们会尽快给您送达！")
                .positiveText("嗯，好哒！")
                .show();
        // 设置点击屏幕Dialog不消失
        mMsgDialog.setCanceledOnTouchOutside(false);
        //取消Back键监听
        mMsgDialog.setCancelable(false);
    }

    /**
     * 清空 页面上的 数据
     *
     * @return
     */
    public void clearData() {
        //清空联通数据
        avPurchaseUnicomMetering.clearNumberData();
        mUnicomNum = 0;
        //清空 移动数据
        avPurchaseMoveMetering.clearNumberData();
        mMoveNum = 0;
        //清空 电信数据
        avPurchaseTelecomMetering.clearNumberData();
        mTelecomNum = 0;
        //清空 170数据
        avPurchaseOtherMetering.clearNumberData();
        mOtherNum = 0;
        //清空 配送地址
        etPurchaseAddress.setText("");
        //清空 联系电话
        etPurchasePhone.setText("");
    }

    @Override
    protected int getContentViewId() {
        return R.layout.frg_purchase;
    }
}
